package org.dromara.common.mail.utils;

import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil;

import java.io.Serial;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：邮件异常
 * 该类继承自RuntimeException，用于在运行时处理邮件相关的异常情况
 */
public class MailException extends RuntimeException {

    @Serial
    private static final long serialVersionUID = 8247610319171014183L;

    /**
     * 构造一个包含原始异常信息的MailException
     * @param e 原始异常对象，用于包装成MailException
     */
    public MailException(Throwable e) {
        super(ExceptionUtil.getMessage(e), e);
    }

    /**
     * 构造一个具有指定错误消息的MailException
     * @param message 异常的错误消息
     */
    public MailException(String message) {
        super(message);
    }

    /**
     * 构造一个包含格式化错误消息的MailException
     * @param messageTemplate 错误消息模板，包含占位符
     * @param params 错误消息模板中占位符对应的参数
     */
    public MailException(String messageTemplate, Object... params) {
        super(StrUtil.format(messageTemplate, params));
    }

    /**
     * 构造一个包含指定错误消息和原始异常的MailException
     * @param message 异常的错误消息
     * @param throwable 原始异常对象
     */
    public MailException(String message, Throwable throwable) {
        super(message, throwable);
    }

    /**
     * 构造一个包含指定错误消息、原始异常，以及是否抑制和是否写入堆栈信息的MailException
     * @param message 异常的错误消息
     * @param throwable 原始异常对象
     * @param enableSuppression 是否抑制原始异常
     * @param writableStackTrace 是否写入堆栈信息
     */
    public MailException(String message, Throwable throwable, boolean enableSuppression, boolean writableStackTrace) {
        super(message, throwable, enableSuppression, writableStackTrace);
    }

    /**
     * 构造一个包含格式化错误消息和原始异常的MailException
     * @param throwable 原始异常对象
     * @param messageTemplate 错误消息模板，包含占位符
     * @param params 错误消息模板中占位符对应的参数
     */
    public MailException(Throwable throwable, String messageTemplate, Object... params) {
        super(StrUtil.format(messageTemplate, params), throwable);
    }
}
